package cn.supermaster.management.web.service.system;

import cn.supermaster.management.common.domain.SystemRole;
import cn.supermaster.management.common.domain.SystemUser;
import cn.supermaster.management.common.page.TableDataInfo;
import cn.supermaster.management.common.response.WebResponse;
import cn.supermaster.management.system.domain.SystemUserRole;
import org.springframework.ui.ModelMap;

/**
 * All rights Reserved, Designed By www.super-bytecode.com
 *
 * @ProjectName: supermaster-management
 * @Package: cn.supermaster.management.web.service.system
 * @ClassName: ISystemRoleService
 * @Description: []
 * <p> </p>
 * @Author: [Lance Ting]
 * @Date: 2021/1/11 23:10
 * @Version: V1.0
 * @Copyright: 2021 www.super-bytecode.comn Inc. All rights reserved.
 * TODO: 注意,本文件Lance Ting所作,如果转载或使用请标明具体出处!
 **/
public interface ISRoleService {
    /*
     * ================================================
     *  页面跳转功能实现
     * ================================================
     */

    /**
     * @Description: [跳转到role角色首页界面]
     * <p></P>
     * @Title: skipRoleIndexHtml
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Return: java.lang.String
     */
    String skipRoleIndexHtml();

    /**
     * @Description: [跳转新增角色界面]
     * <p></P>
     * @Title: skipAddRoleHtml
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Return: java.lang.String
     */
    String skipAddRoleHtml();

    /**
     * @Description: [跳转修改角色界面]
     * <p></P>
     * @Title: skipModifyRoleHtml
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: modelMap
     * @Param: roleId
     * @Return: java.lang.String
     */
    String skipModifyRoleHtml(ModelMap modelMap, Long roleId);

    /**
     * @Description: [跳转角色分配数据权限界面]
     * <p></P>
     * @Title: skipAuthDataScopeHtml
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: modelMap
     * @Param: roleId
     * @Return: java.lang.String
     */
    String skipAuthDataScopeHtml(ModelMap modelMap, Long roleId);

    /**
     * @Description: [跳转选择菜单树界面]
     * <p></P>
     * @Title: skipSelectMenuTreeHtml
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Return: java.lang.String
     */
    String skipSelectMenuTreeHtml();

    /**
     * @Description: [跳转分配用户界面]
     * <p></P>
     * @Title: skipAuthUserHtml
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: modelMap
     * @Param: roleId
     * @Return: java.lang.String
     */
    String skipAuthUserHtml(ModelMap modelMap, Long roleId);

    /**
     * @Description: [跳转选择用户界面]
     * <p></P>
     * @Title: skipSelectedUserHtml
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: modelMap
     * @Param: roleId
     * @Return: java.lang.String
     */
    String skipSelectedUserHtml(ModelMap modelMap, Long roleId);

    /*
     * ================================================
     *  Rest功能实现
     * ================================================
     */

    /**
     * @Description: [新增角色信息]
     * <p></P>
     * @Title: doAddRoleInformation
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: role
     * @Return: cn.supermaster.management.common.response.WebResult
     */
    WebResponse doAddRoleInformation(SystemRole role);

    /**
     * @Description: [导出角色信息]
     * <p></P>
     * @Title: doExportRoleInformation
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: role
     * @Return: cn.supermaster.management.common.response.WebResult
     */
    WebResponse doExportRoleInformation(SystemRole role);

    /**
     * @Description: [根据条件获取角色列表]
     * <p></P>
     * @Title: queryRoleListByCondition
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: role
     * @Return: cn.supermaster.management.common.page.TableDataInfo
     */
    TableDataInfo queryRoleListByCondition(SystemRole role);

    /**
     * @Description: [查询已分配用户角色列表]
     * <p></P>
     * @Title: queryAllocatedUserRoleList
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: user
     * @Return: cn.supermaster.management.common.page.TableDataInfo
     */
    TableDataInfo queryAllocatedUserRoleList(SystemUser user);

    /**
     * @Description: [查询未分配用户角色列表]
     * <p></P>
     * @Title: queryUnallocatedUserRoleList
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: user
     * @Return: cn.supermaster.management.common.page.TableDataInfo
     */
    TableDataInfo queryUnallocatedUserRoleList(SystemUser user);

    /**
     * @Description: [取消授权]
     * <p></P>
     * @Title: doCancelUserAuthorization
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: userRole
     * @Return: cn.supermaster.management.common.response.WebResult
     */
    WebResponse doCancelUserAuthorization(SystemUserRole userRole);

    /**
     * @Description: [批量选择用户授权]
     * <p></P>
     * @Title: queryUserAllAuthorizations
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: roleId
     * @Param: userIds
     * @Return: cn.supermaster.management.common.response.WebResult
     * @Throws:
     */
    WebResponse queryUserAllAuthorizations(Long roleId, String userIds);

    /**
     * @Description: [批量取消授权]
     * <p></P>
     * @Title: doCancelAllUserAuthorizations
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: roleId
     * @Param: userIds
     * @Return: cn.supermaster.management.common.response.WebResult
     */
    WebResponse doCancelAllUserAuthorizations(Long roleId, String userIds);

    /**
     * @Description: [修改角色信息]
     * <p></P>
     * @Title: doModifyRoleInformation
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: role
     * @Return: cn.supermaster.management.common.response.WebResult
     */
    WebResponse doModifyRoleInformation(SystemRole role);

    /**
     * @Description: [角色状态修改]
     * <p></P>
     * @Title: doModifyRoleStatus
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: role
     * @Return: cn.supermaster.management.common.response.WebResult
     */
    WebResponse doModifyRoleStatus(SystemRole role);

    /**
     * @Description: [保存角色分配数据权限]
     * <p></P>
     * @Title: doAddAuthDataScope
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: role
     * @Return: cn.supermaster.management.common.response.WebResult
     */
    WebResponse doAddAuthDataScope(SystemRole role);

    /**
     * @Description: [删除角色信息]
     * <p></P>
     * @Title: doRemoveRoleInformation
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: ids
     * @Return: cn.supermaster.management.common.response.WebResult
     */
    WebResponse doRemoveRoleInformation(String ids);

    /**
     * @Description: [校验角色名称唯一性]
     * <p></P>
     * @Title: doCheckRoleNameUnique
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: role
     * @Return: java.lang.String
     */
    String doCheckRoleNameUnique(SystemRole role);

    /**
     * @Description: [校验角色权限Keys]
     * <p></P>
     * @Title: doCheckRoleKeyUnique
     * @Author: Lance Ting
     * @Date: 2021-01-11
     * @Param: role
     * @Return: java.lang.String
     */
    String doCheckRoleKeyUnique(SystemRole role);

}